package com.xmim.fulcrum;

import com.xmim.core.container.Container;
import com.xmim.core.container.ServerContainer;
import com.xmim.core.container.handler.HandlerManager;
import com.xmim.core.entity.Message;
import com.xmim.core.session.Session;
import com.xmim.core.session.user.UserSession;
import com.xmim.fulcrum.handler.IMessageHandler;
import com.xmim.fulcrum.node.FulcrumServiceNode;
import com.xmim.fulcrum.node.FulcrumUserNode;
import com.xmim.fulcrum.session.FulcrumSessionManager;

public interface FulcrumDiscover extends ServerContainer<Integer, IMessageHandler<Message<?>>> {
    /**
     * 添加处理器
     *
     * @param handler
     */
    FulcrumDiscover addHandler(Object handler);

    /**
     * 设置分布式发送器管理
     *
     * @param sessionManager
     * @return
     */
    FulcrumDiscover setSessionManager(FulcrumSessionManager sessionManager);

    /**
     * 发现数据
     *
     * @param session
     * @param msg
     */

    void discover(UserSession session, Message msg);

    /**
     * 获取目标会话
     *
     * @param sessionId
     * @return
     */
    Session getSession(String sessionId);

    /**
     * 缓存会话到本地
     *
     * @param userSession
     */
    void cacheUserSession(UserSession userSession);

    /**
     * 获取支点会话管理器
     *
     * @return
     */
    FulcrumSessionManager getSessionManager();

    /**
     * 获取用户缓存的节点
     *
     * @return
     */
    FulcrumPathCache<FulcrumUserNode> getUserCache();

    /**
     * 获取服务端缓存的节点
     *
     * @return
     */
    FulcrumPathCache<FulcrumServiceNode> getServiceCache();

    /**
     * 获取在线服务统计器
     *
     * @return
     */
    FulcrumCounter getOnlineServixeCounter();

    /**
     * 获取在线用户统计器
     *
     * @return
     */
    FulcrumCounter getOnlineUserCounter();

    /**
     * 获取本地服务节点
     *
     * @return
     */
    FulcrumServiceNode getLocalNode();

    /**
     * 获取工厂
     *
     * @return
     */
    @Override
    FulcrumFactory getFactory();


}
